package com.reservation.mapper;

import com.reservation.dto.user.order.CancelReservation;
import com.reservation.vo.user.order.GetAllOrderVO;
import com.reservation.vo.user.order.GetWaitPayOrderVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
@Repository
public interface OrderMapper {

    List<GetAllOrderVO> getAllOrderVOList(int id);

    List<GetWaitPayOrderVO> getWaitPayOrderVOList(int id);

    List<GetAllOrderVO> getCancelableOrderList(int id);

    int setBookingsStates(CancelReservation cancelReservation);

    int insertToCancellationRequests(CancelReservation cancelReservation);

    List<GetAllOrderVO> getWaitAuditOrder1(int id);
    List<GetAllOrderVO> getWaitAuditOrder2(int id);

    int setConfirmCancelReservation(Long id);
    
    /**
     * 更新用户钱包余额（增加）
     * @param userId 用户ID
     * @param amount 金额
     * @param payType 支付类型（1：支付宝，2：微信）
     * @return 影响行数
     */
    int updateUserWalletIncrease(Long userId, Double amount, int payType);
    
    /**
     * 更新用户钱包余额（减少）
     * @param userId 用户ID
     * @param amount 金额
     * @param payType 支付类型（1：支付宝，2：微信）
     * @return 影响行数
     */
    int updateUserWalletDecrease(Long userId, Double amount, int payType);
    
    /**
     * 获取用户ID根据订单ID
     * @param orderId 订单ID
     * @return 用户ID
     */
    Long getUserIdByOrderId(Long orderId);
    
    /**
     * 获取订单支付方式
     * @param orderId 订单ID
     * @return 支付方式（1：支付宝，2：微信）
     */
    Integer getOrderPayMethod(Long orderId);

    /**
     * 获取订单总金额
     * @param id 订单ID
     * @return 订单总金额
     */
    Double getOrderTotalAmount(@Param("id") Long id);

    /**
     * 获取订单开始时间
     * @param id 订单ID
     * @return 订单开始时间
     */
    LocalDateTime getOrderStartTime(@Param("id") Long id);

}
